#include <iostream>
#include <cstdio>
#include <string>
#include <unistd.h>
#include <pthread.h>

int flag=100;

void showtid(pthread_t &tid)
{
    printf("tid: 0x%lx\n", tid);//按16进制打印
}

std::string FormatId(const pthread_t &tid)
{
    char id[64];
    snprintf(id,sizeof(id),"0x%lx",tid);
    return id;
}

void *routine(void *args)
{
    std::string name=static_cast<const char*>(args);
    pthread_t tid=pthread_self();//获取当前线程id
    int cnt=5;
    while(cnt--)
    {
        std::cout << "我是一个新线程: 我的名字是: " << name << "我的PID是"<<getpid()<<" 我的Id是: " << FormatId(tid) << std::endl;
        sleep(1);
        flag++;
    }
    return (void*)123;
}

int main()
{
    pthread_t tid;
    int n=pthread_create(&tid,nullptr,routine,(void*)"thread-1");
    (void)n;
    showtid(tid);
    int cnt = 5;
    while (cnt)
    {
        std::cout << "我是main线程: 我的名字是: main thread" << "我的PID是"<<getpid()<<" 我的Id是: " << FormatId(pthread_self()) << ", flag: " << flag << std::endl;
        sleep(1);
        cnt--;
    }

     void *ret = nullptr; // ret也是一个变量！！也有空间哦！

    // 等待的目标线程，如果异常了，整个进程都退出了，包括main线程，所以join不需要处理异常！
    pthread_join(tid,&ret);

     std::cout << "ret is : " << (long long int)ret << std::endl;
    return 0;
}